package com.wyix;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class TakeawayDemo {
    public static void main(String[] args) throws InterruptedException {
        // 修改备餐任务，模拟超时异常
        CompletableFuture<String> preparePizza = CompletableFuture.supplyAsync(() -> {
            System.out.println("商家：收到订单，开始做披萨...");
            try {
                TimeUnit.SECONDS.sleep(5); // 故意超时（假设用户只等3秒）
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
            return "夏威夷披萨（大份）";
        }).exceptionally(e -> {
            System.out.println("异常：备餐超时，取消订单！");
            return "取消"; // 返回异常后的默认结果
        });

        // 2. 备餐完成后，骑手开始送餐（链式调用）
        CompletableFuture<String> deliverPizza = preparePizza.thenApply(pizza -> {
            System.out.println("骑手：披萨已做好，开始配送...");
            try {
                TimeUnit.SECONDS.sleep(1); // 模拟送餐1秒
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
            return "已送达 " + pizza; // 返回配送结果
        });

        // 3. 配送完成后，用户收到餐品（消费结果）
        deliverPizza.thenAccept(result -> {
            System.out.println("用户：" + result + "，开吃！");
        });

        // 主线程等待所有异步任务完成（避免程序提前退出）
        Thread.sleep(4000);
    }
}